Challenge #80: Slowly Changing Dimensions ~ジェダイ人事部~ – Alteryx Weekly Challenge
こんにちは。Alteryxサポートエンジニアとして勉強中のスズです。
当エントリは『Alteryx Weekly Challenge:Intermediate Level Advent Calendar 2018』の25日目です。
- Alteryx Weekly Challenge:Intermediate Level Advent Calendar 2018 - Qiita
- Alteryx Weekly Challenge:Intermediate Level Advent Calendar 2018 | シリーズ | Developers.IO
『Alteryx Weekly Challenge:Intermediate Level Advent Calendar 2018』では、Alteryx Communityで公開されているWeekly ChallengeのIntermediate Levelにひたすら1人で挑戦してきました。
最終回は、ジェダイ人事部のログの更新に挑戦します。
動作環境
当エントリの執筆には、以下の環境を利用しています。
- Windows 10 Pro
- Alteryx Designer 2018.4.4.54346 英語版
Challenge #80: Slowly Changing Dimensions
お題
今回挑戦するお題はこちら。
「Input」側には2つデータが用意されています。
1つ目のデータは現在のログです。ジェダイの名前(「Name」列)、階級(「Level」列)、開始日(「Start Date」列)、終了日(「End Date」列)、現時点を示すフラグ(「Current Flag」列)が書かれています。
2つ目は更新用のデータです。お題に書かれている説明によると、Bobが暗黒面に落ち、KaitlinとRichardの階級が上がり、Joeがジェダイナイトになりました。
「Output」側のデータはこちら。更新分が反映されています。
解答の詳細
今回作成するワークフローは以下の通りです。
2つのデータの結合
Unionツール(Join -> Union)を使用して、2つのデータを結合します。データの結合には Auto Config by Name を使用しています。
データの更新のため順番の並べ替え
データの更新を行いやすいよう、Sortツール(Preparation -> Sort)を使用して、順番を並べ替えます。各ジェダイの階級の開始日を降順で表示します。
設定は以下の通りです。
- 「Name」列:Descending
- 「Start Date」列:Descending
「End Date」列の更新
Multi-Row Formulaツール(Preparation -> Multi-Row Formula)を使用して、「End Date」列を更新します。各ジェダイの階級の開始日を、下の階級の終了日に出力します。階級に変化がない場合は暗黒面に落ちた人物になります。この人物はのちほど除外できるように開始日と終了日を同じに設定します。
式は以下の通り設定しています。
if [Row-1:Name] == [Name] then [Row-1:Start Date] elseif [Name] == [Row+1:Name] and [Level] == [Row+1:Level] then [Start Date] else [End Date] endif
- 「Name」列が1つ上と同じ場合は1つ上の「Start Date」列を出力
- 「Name」列と「Level」列がそれぞれ1つ下と同じ場合は「Start Date」を出力
- それ以外の場合は「End Date」列を出力
データの抽出
Filterツール(Preparation -> Filter)を使用して、「Start Date」列と「End Date」列が同じになっている人物を除外します。
「Current Flag」列の更新
Multi-Row Formulaツールを使用して、「Current Flag」列を更新します。終了日がNullになっている階級が現在の階級です。
式は以下の通り設定しています。
if isnull([End Date]) then "Y" else "N" endif
- 「End Date」列がNullの場合は「Y」を出力
- それ以外の場合は「N」を出力
出力用にデータの並べ替え
Sortツールを使用して、以下の設定で順番を並べ替えます。
設定は以下の通りです。
- 「Name」列:Ascending
- 「Current Flag」列:Descending
- 「Level」列:Ascending
完成
結果を確認して完成です。
最後に
今回はWeekly ChallengeのChallenge #80: Slowly Changing Dimensionsに挑戦しました。
Alteryx Weekly Challenge:Intermediate Level Advent Calendar 2018は今回で終了となりますが、Weekly Challengeには挑戦していないお題がまだまだあります。Weekly Challengeへの挑戦は今後も続けていきますので、その時はまたご覧いただきますと幸いです。
次回もお楽しみに!
サンプルワークフローのご案内
クラスメソッドでご契約のユーザー様向けに、当ブログでご紹介したワークフローを専用ポータルにて公開しております。当エントリでご紹介したワークフローも公開予定ですので、ご参考にしていただきますと幸いです。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。